var elevator, proprio, locateType, selection;
var polyGMV, polyBR, polyArbre, polyBassin, polyTerrain;
var pointArbre, pointBassin, pointTerrain, idTerrain, idArbre;
var infoArbre, infoBassin, infoTerrain;
var gmv =100;
var matricebr=1;
var centre;
var rayon = 0.01;
var segment = 60;

function muraille(){
	$.getJSON(
			baseURL + "/admin/Pointgmv/allpointgmv",
			function(json) {
				placerGMV(json.rows);
			}, 'json'
	);
	$.getJSON(
			baseURL + "/admin/Pointbr/allpointbr",
			function(json) {
				placerBR(json.rows);
			}, 'json'
	);
}

function terrain(){
	$.getJSON(
			baseURL + "/admin/Pointterrain/allpointterrain",
			function(json) {
				placerTerrain(json.rows, json.info);
			}, 'json'
	);
}

function bassin(){
	$.getJSON(
			baseURL + "/admin/Pointbassin/allpointbassin",
			function(json) {
				placerBassin(json.rows, json.info);
			}, 'json'
	);
}

function arbre(){
	$.getJSON(
			baseURL + "/admin/arbre/",
			function(json) {
				var options = '';
				placerArbre(json.rows);
				for (var i = 0; i < json.rows.length; i++) {
					options += '<option value="' + json.rows[i].id + '">GMV (' + 
					json.rows[i].i + ', ' + json.rows[i].j + ')</option>';
				}
				$("#pointarbre").html(options);
			}, 'json'
	);
}

function placerGMV(point) {
	var square = new Array();
	for (i=0; i<point.length; i++) {
		square[i] = new google.maps.LatLng(point[i].latitude, point[i].longitude);
	}

	polyGMV = new google.maps.Polygon({
		paths: square,
		strokeColor: "#347C17",
		strokeOpacity: 1,
		strokeWeight: 2,
		fillColor: "#347C17",
		fillOpacity: 0.1
	});
	polyGMV.setMap(map);
	/*google.maps.event.addListener(polyGMV, 'click', function(event) {
		addMarker(event.latLng);
	});*/
}

function placerBR(point) {
	var square = new Array();
	for (i=0; i<point.length; i++) {
		square[i] = new google.maps.LatLng(point[i].latitude, point[i].longitude);
	}

	polyBR = new google.maps.Polygon({
		paths: square,
		strokeColor: "#993300",
		strokeOpacity: 1,
		strokeWeight: 2,
		fillColor: "#993300",
		fillOpacity: 0.1
	});
	polyBR.setMap(map);
	/*google.maps.event.addListener(polyGMV, 'click', function(event) {
		addMarker(event.latLng);
	});*/
}

function placerTerrain(point, info) {
	var square = new Array();
	infoTerrain = new Array();
	pointTerrain = new Array();
	for (i=0; i<point.length; i++) {
		square[i] = new Array();
		pointTerrain[i] = new google.maps.LatLng(0, 0);
		for (j=0; j<point[i].length; j++) {
			latitude = pointTerrain[i].lat();longitude = pointTerrain[i].lng();
			pointTerrain[i] = new google.maps.LatLng(
					latitude + point[i][j].latitude/point[i].length, 
					longitude + point[i][j].longitude/point[i].length);
			square[i][j] = new google.maps.LatLng(point[i][j].latitude, point[i][j].longitude);
		}
		pointTerrain[i] = new google.maps.LatLng(pointTerrain[i].lat(),pointTerrain[i].lng());
	}
	polyTerrain = new Array();
	for (var i=0; i<point.length; i++) {
		polyTerrain[i] = new google.maps.Polygon({paths: square[i], strokeColor: "#993300",
			strokeOpacity: 1,	strokeWeight: 1, fillColor: "#993300", fillOpacity: 0.1});
		polyTerrain[i].setMap(map);
		infoTerrain[i] = new Array(2);
		infoTerrain[i][0] = info[i].proprietaire_idproprietaire;
		infoTerrain[i][1] = '<div style="font-size: 16px;">BR ('+ info[i].i +', '+ info[i].j +')</div><hr>';
		if(info[i].proprietaire_idproprietaire!=0) {
			infoTerrain[i][1] = infoTerrain[i][1] + 
			'<br>Propriétaire      : ' + proprio[info[i].proprietaire_idproprietaire];
		}
		infoTerrain[i][1] = infoTerrain[i][1] + 
		'<br>Longitude   : ' + pointTerrain[i].lng() +
		'<br>Latitude    : ' + pointTerrain[i].lat() +
		'<br><a href="#" onClick="restaurer()">Fermer</a>';
		/*google.maps.event.addListener(polyTerrain[i], 'click', function(event) {
			addMarker(event.latLng);

			$.post("admin/arbre/add",{
				i: 1,
				j: 1,
				latitude: event.latLng.lat(),
				longitude: event.latLng.lng(),
				idmatricebr: polyTerrain.indexOf(this),
				type: 'village'
			});
			gmv++;
		});*/
	}
}

function placerBassin(point, info) {
	var square = new Array();
	infoBassin = new Array();
	pointBassin = new Array();
	for (i=0; i<point.length; i++) {
		square[i] = new Array();
		pointBassin[i] = new google.maps.LatLng(0, 0);
		for (j=0; j<point[i].length; j++) {
			latitude = pointBassin[i].lat();longitude = pointBassin[i].lng();
			pointBassin[i] = new google.maps.LatLng(
					latitude + point[i][j].latitude/point[i].length, 
					longitude + point[i][j].longitude/point[i].length);
			square[i][j] = new google.maps.LatLng(point[i][j].latitude, point[i][j].longitude);
		}
		pointBassin[i] = new google.maps.LatLng(pointBassin[i].lat(),pointBassin[i].lng());
	}
	polyBassin = new Array();
	for (var i=0; i<point.length; i++) {
		polyBassin[i] = new google.maps.Polygon({paths: square[i], strokeColor: "#b0c4de",
			strokeOpacity: 1,	strokeWeight: 1, fillColor: "#b0c4de", fillOpacity: 0.1});
		polyBassin[i].setMap(map);
		infoBassin[i] = 'Bassin de rétention de '+ info[i].nombassin;
	}
}

function placerArbre(point) {
	polyArbre = new Array();
	infoArbre = new Array();
	idArbre = new Array();
	pointArbre = new Array();
	for (i=0; i<point.length; i++) {
		idArbre[i] = point[i].idarbre;infoArbre[i] = new Array(2);
		pointArbre[i] = new google.maps.LatLng(point[i].latitude, point[i].longitude);
		map.setCenter(pointArbre[i], map.getZoom());
		infoArbre[i][0] = point[i].proprietaire;
		infoArbre[i][1] = '<div id="infoContent" style="font-size: 16px;">GMV ('+point[i].i+', '+point[i].j+')</div><hr>';
		if(point[i].proprietaire!=0) {
			infoArbre[i][1] = infoArbre[i][1] + 
			'<br>Propriétaire      : ' + proprio[point[i].proprietaire];
		}
		infoArbre[i][1] = infoArbre[i][1] + '<br>Espéce      : ' + point[i].libEspece +
		'<br>Origine     : ' + point[i].libOrigine +
		'<br>Longueur    : ' + point[i].longueur + ' m' +
		'<br>Taille      : ' + point[i].taille + ' m' +
		'<br>Longtude    : ' + point[i].longitude +
		'<br>Latitude    : ' + point[i].latitude +
		'<br><a href="#" onClick="restaurer()">Fermer</a>';
		centre = map.getCenter();
		dessineUnCercle(i);
	}
}

/* Fonction dessineUnCercle() */
function dessineUnCercle(k){
	var latConv = centre.distanceFrom(new google.maps.LatLng(centre.lat()+0.1, centre.lng()))/100;
	var lngConv = centre.distanceFrom(new google.maps.LatLng(centre.lat(), centre.lng()+0.1))/100;
	/* ... Création d'un tableau nommé "pointsCercle". Celui-ci va contenir tous les points nécessaires ... */
	/* ... à la construction du polygone représentant le cercle nommé "polygoneCercle"                  ... */
	var pointsCercle = [];
	var step = parseInt(360/segment)||10;
	for(var i=0; i<=360; i+=step){
		/* ... "pint" : coordonnées d'un point participant à la construction du polygone nommé "polygoneCercle" ... */ 
		var pint = new google.maps.LatLng(centre.lat() + (rayon/latConv * Math.cos(i * Math.PI/180)), centre.lng() + (rayon/lngConv * Math.sin(i * Math.PI/180)));
		/* ... Ajout du point "pint" dans le tableau "pointsCercle" ... */ 
		pointsCercle.push(pint);
	}
	/* ... Création d'un polygone nommé "polygoneCercle" ... */
	polyArbre[k] = new google.maps.Polygon({
		paths: pointsCercle, strokeColor: "#00CC33",
		strokeOpacity: "1", strokeWeight: "1",
		fillColor: "#00CC33", fillOpacity: ".1"});
	/* ... on ajoute le polygone nommé "polygoneCercle" à la carte nommée "maCarte". */
	/* ... ce polygone représente le cercle tracé sur la carte.                  ... */
	polyArbre[k].setMap(map);
}

function colorer(poly, couleur) {
	poly.setOptions({strokeColor: couleur, fillColor: couleur});
}

function deplacerA(p1, p2) {
	var distance = Math.sqrt(Math.pow((p1.lat()-p2.lat()), 2)+
			Math.pow((p2.lng()-p2.lng()), 2));
	var quotient = distance / Math.pow(2, 12-map.getZoom());
	$.timer(500, function (timer) {
		if(quotient>1) {
			map.setZoom(map.getZoom()-1);
			quotient=quotient/2;timer.reset(500);
		} else {
			map.panTo(p2);
			timer.stop();
		}
	});
}

function reduire(valeur) {
	locateType = valeur;
	$('#mainMenu').hide();
	if(locateType==1 || locateType==4) {
		$('#localisation').hide();
		if($('#GMV').mb_getState("iconized")==false)
			$('#GMV').mb_iconize();
		if($('#matrice').mb_getState("iconized")==false)
			$('#matrice').mb_iconize();
	} else if(locateType==2) {
		$('#GMV').hide();
		if($('#matrice').mb_getState("iconized")==false)
			$('#matrice').mb_iconize();
		if($('#localisation').mb_getState("iconized")==false)
			$('#localisation').mb_iconize();
	} else {
		$('#matrice').hide();
		if($('#GMV').mb_getState("iconized")==false)
			$('#GMV').mb_iconize();
		if($('#localisation').mb_getState("iconized")==false)
			$('#localisation').mb_iconize();
	}
}

function restaurer() {
	$('#mainMenu').show();
	if(locateType==1 || locateType==4) {
		$('#localisation').show();
	} else if(locateType==2) {
		$('#GMV').show();
	} else {
		$('#matrice').show();
	}
	if(locateType==1 || locateType==3) {
		colorer(polyArbre[selection], '#00CC33');
	} else {
		colorer(polyTerrain[selection], '#993300');
	}
	$("#message").fadeOut(1);
}

/* Fonction localiser un arbre */
function localiserArbre(index, type) {
	reduire(type);selection=index;
	var etat = 'zoom';levelZoom = map.getZoom();
	$("#message").css({ top:100, left:500});
	map.panTo(pointArbre[index]);
	$.timer(500, function (timer) {
		if(etat=='zoom') {
			map.setCenter(pointArbre[index]);
			etat='afficher';timer.reset(1000);
		} else {
			map.setZoom(17);
			colorer(polyArbre[index], "#ff0000");
			$("#message").html(infoArbre[index][1]);
			$("#message").slideDown(700);
			timer.stop();
		}
	});
}

/* Fonction parcourir des arbres */
function parcourirArbre(proprio) {
	var i = 0; levelZoom = map.getZoom(); var etat = 'zoom';
	var centre = map.getCenter();$("#message").css({ top:50, left:500});
	$.timer(500, function (timer) {
		if (i<pointArbre.length) {
			while(i<pointArbre.length){if (infoArbre[i][0]!=proprio) i++;else break;}
			if (i==pointArbre.length) timer.reset(0);
			if(etat=='zoom') {
				etat='non-zoom';timer.reset(1000);
			} else if(etat=='non-zoom') {
				deplacerA(map.getCenter(), pointArbre[i]);
				//while(map.getCenter()!=pointArbre[i]){alert('1');}
				etat='placer';
				timer.reset(1000);
			} else if(etat=='placer') {
				map.setCenter(pointArbre[i]);
				colorer(polyArbre[i], "#ff0000");
				map.setZoom(17);
				$("#message").html(infoArbre[i][1]);
				$("#message").slideDown(1000);
				etat='afficher';
				timer.reset(6000);
			} else if(etat=='afficher') {
				$("#message").fadeOut(2000);
				etat='decolorer';
				timer.reset(2000);
			} else {
				etat='zoom';
				colorer(polyArbre[i], "#00CC33");
				i++;timer.reset(0);
			}
		}
		else {
			map.panTo(centre);
			map.setZoom(levelZoom);
			timer.stop();
		}
	});
}

/* Fonction localiser un bassin de rétention */
function localiserBassin(index) {
	var etat = false;
	$("#message").css({ top:200, left:500});
	map.panTo(pointBassin[index]);
	$.timer(500, function (timer) {
		if(etat==false) {
			map.setCenter(pointBassin[index]);
			etat=true;timer.reset(1000);
		}
		else {
			map.setZoom(12);
			$("#message").html(infoBassin[index]);
			$("#message").slideDown(300).fadeOut(3000);
			timer.stop();
		}
	});
}

/* Fonction parcourir des bassins de rétentions */
function parcourirBassin() {
	var i = 0; levelZoom = map.getZoom(); var etat = 'zoom';
	var centre = map.getCenter();$("#message").css({ top:200, left:500});
	$.timer(500, function (timer) {
		if (i<pointBassin.length) {
			if(etat=='zoom') {
				map.setZoom(4);
				etat='non-zoom';
				timer.reset(1000);
			} else if(etat=='non-zoom') {
				deplacerA(map.getCenter(), pointBassin[i]);
				etat='placer';
				//timer.reset(1000);
			} else if(etat=='placer') {
				map.setCenter(pointBassin[i]);
				map.setZoom(12);
				$("#message").html(infoBassin[i]);
				$("#message").slideDown(700);
				etat='afficher';
				timer.reset(4000);
			} else {
				$("#message").fadeOut(1000);
				i++;etat='zoom';
				timer.reset(1000);
			}
		}
		else {
			map.panTo(centre);
			map.setZoom(levelZoom);
			timer.stop();
		}
	});
}

/* Fonction localiser un terrain */
function localiserTerrain(index, type) {
	reduire(type);selection=index;
	var etat = 'zoom';levelZoom = map.getZoom();
	$("#message").css({ top:200, left:500});
	map.panTo(pointTerrain[index]);
	$.timer(500, function (timer) {
		if(etat=='zoom') {
			map.setCenter(pointTerrain[index]);
			etat='afficher';timer.reset(1000);
		}
		else {
			map.setZoom(17);
			colorer(polyTerrain[index], "#ff0000");
			$("#message").html(infoTerrain[index][1]);
			$("#message").slideDown(700);
			timer.stop();
		}
	});
}

/* Fonction parcourir des arbres */
function parcourirTerrain(proprio) {
	var i = 0; levelZoom = map.getZoom(); var etat = 'zoom';
	var centre = map.getCenter();$("#message").css({ top:100, left:500});
	$.timer(500, function (timer) {
		if (i<pointTerrain.length) {
			while(i<pointTerrain.length){if (infoTerrain[i][0]!=proprio) i++;else break;}
			if (i==pointTerrain.length) timer.reset(0);
			if(etat=='zoom') {
				map.setZoom(4);
				etat='non-zoom';
				timer.reset(1000);
			} else if(etat=='non-zoom') {
				deplacerA(map.getCenter(), pointTerrain[i]);
				colorer(polyTerrain[i], "#ff0000");
				etat='placer';
				timer.reset(1000);
			} else if(etat=='placer') {
				map.setCenter(pointTerrain[i]);
				colorer(polyTerrain[i], "#ff0000");
				map.setZoom(17);
				$("#message").html(infoTerrain[i][1]);
				$("#message").slideDown(1000);
				etat='afficher';
				timer.reset(6000);
			} else if(etat=='afficher') {
				$("#message").fadeOut(2000);
				etat='decolorer';
				timer.reset(2000);
			} else {
				etat='zoom';
				colorer(polyTerrain[i], "#00CC33");
				i++;timer.reset(0);
			}
		}
		else {
			map.panTo(centre);
			map.setZoom(levelZoom);
			timer.stop();
		}
	});
}
